//package top.cluski.shardingsphere;
//
//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
////import org.apache.shardingsphere.api.hint.HintManager;
//import org.junit.jupiter.api.Test;
//import org.springframework.boot.test.context.SpringBootTest;
//import top.cluski.shardingsphere.entity.Course;
//import top.cluski.shardingsphere.mapper.CourseMapper;
//
//import javax.annotation.Resource;
//import java.util.List;
//
///**
// * 分片策略为hint时的测试
// */
//@SpringBootTest
//public class ShardingJDBCTest04 {
//
//    @Resource
//    CourseMapper courseMapper;
//
//    /**
//     * hint更加灵活，跟sql是分离开来的，可以任意制定“分片键“（需要自己写算法类）
//     * 例如有以下sql，无法进行分片键的分析
//     * select count(1) from (select * from course where cid = 1)
//     *
//     * hint有以下限制：
//     * 1. 不支持UNION
//     * SELECT * FROM t_order1 UNION SELECT * FROM t_order2
//     * INSET INTO tb1_name (col1, col2, ...) SELECT col1, col2, FROM tb_name WHERE col3 = ?
//     *
//     * 2. 不支持多层子查询
//     * SELECT COUNT(*) FROM (SELECT t_order_o WHERE c.id IN (SELECT id FROM t_order WHERE status = ?))
//     *
//     * 3. 不支持函数计算， ShardingShpere只能够通过SQL字面提取分片的值
//     * SELECT * FROM t_order WHERE to_date(create_time, 'yyyy-mm-dd') = '2019-01-01';
//     */
//    @Test
//    public void queryCourseHint() {
//
//        // 线程安全
//        // 设置之后，这个线程的上下文就已经存在
//        HintManager hitManager = HintManager.getInstance();
//        hitManager.addTableShardingValue("course", 2);
//
//        // select * from course;
//        List<Course> courses = courseMapper.selectList(null);
//        courses.forEach(System.out::println);
//
//        // 用完就关闭
//        hitManager.close();
//    }
//}
